package leetcode.editor.cn;
//在二维平面上，有一个机器人从原点 (0, 0) 开始。给出它的移动顺序，判断这个机器人在完成移动后是否在 (0, 0) 处结束。 
//
// 移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R（右），L（左），U（上）和 D（下）。 
//
// 如果机器人在完成所有动作后返回原点，则返回 true。否则，返回 false。 
//
// 注意：机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次，“L” 将始终向左移动等。此外，假设每次移动机器人的移动幅度相同。 
//
// 
//
// 示例 1: 
//
// 
//输入: moves = "UD"
//输出: true
//解释：机器人向上移动一次，然后向下移动一次。所有动作都具有相同的幅度，因此它最终回到它开始的原点。因此，我们返回 true。 
//
// 示例 2: 
//
// 
//输入: moves = "LL"
//输出: false
//解释：机器人向左移动两次。它最终位于原点的左侧，距原点有两次 “移动” 的距离。我们返回 false，因为它在移动结束时没有返回原点。 
//
// 
//
// 提示: 
//
// DLRU
// 1 <= moves.length <= 2 * 10⁴ 
// moves 只包含字符 'U', 'D', 'L' 和 'R' 
// RLUURDDDLU
//
// Related Topics 字符串 模拟 👍 255 👎 0


import java.util.Arrays;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution251 {

    public boolean judgeCircle(String moves) {
        int hCount = 0;
        int zCount = 0;
        for (int i = 0; i < moves.length(); i++) {
            char c = moves.charAt(i);
            /*if (c == 'R') {
                hCount++;
            } else if (c == 'L') {
                hCount--;
            } else if (c == 'U') {
                zCount++;
            } else {
                zCount--;
            }*/
            switch (c) {
                case 'R':
                    hCount++;
                    break;
                case 'L':
                    hCount--;
                    break;
                case 'U':
                    zCount++;
                    break;
                case 'D':
                    zCount--;
                    break;
                default:
                    break;
            }
        }
        return hCount == 0 && zCount == 0;
    }

    public boolean judgeCircle2(String moves) {
        int rCount = 0;
        int lCount = 0;
        int uCount = 0;
        int dCount = 0;
        for (int i = 0; i < moves.length(); i++) {
            char c = moves.charAt(i);
            switch (c) {
                case 'R':
                    rCount++;
                    break;
                case 'L':
                    lCount++;
                    break;
                case 'U':
                    uCount++;
                    break;
                case 'D':
                    dCount++;
                    break;
                default:
                    break;
            }
        }
        return rCount == lCount && uCount == dCount;
    }


    public boolean judgeCircle1(String moves) {
        int length = moves.length();
        if (length % 2 == 1) return false;
        char[] chars = moves.toCharArray();
        Arrays.sort(chars);
        String s = new String(chars);
        int rCount = 0;
        int lCount = 0;
        int uCount = 0;
        int dCount = 0;
        if (s.lastIndexOf("R") >= 0) {
            rCount = s.lastIndexOf("R") - s.indexOf("R") + 1;
        }
        if (s.lastIndexOf("L") >= 0) {
            lCount = s.lastIndexOf("L") - s.indexOf("L") + 1;
        }
        if (s.lastIndexOf("U") >= 0) {
            uCount = s.lastIndexOf("U") - s.indexOf("U") + 1;
        }
        if (s.lastIndexOf("D") >= 0) {
            dCount = s.lastIndexOf("D") - s.indexOf("D") + 1;
        }
        return rCount == lCount && uCount == dCount;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
